package com.atguigu.gmall.order.service;

import com.atguigu.gmall.model.enums.ProcessStatus;
import com.atguigu.gmall.model.order.OrderInfo;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * @author mqx
 * 后续在取消订单的时候，会用到根据订单Id 查询是否有当前订单。
 * @date 2020-10-22 11:51:36
 */
public interface OrderService extends IService<OrderInfo> {

    /**
     * 保存订单
     * @param orderInfo
     * @return 为什么返回一个Long 目的是为了做支付，支付是根据订单Id
     */
    Long saveOrderInfo(OrderInfo orderInfo);

    /**
     * 生成流水号
     * @param userId
     * @return
     */
    String getTradeNo(String userId);

    /**
     * 比较
     * @param tradeNo   表示从页面获取到的
     * @param userId    表示通过它获取缓存的流水号
     * @return
     */
    Boolean checkTradeCode(String tradeNo,String userId);

    /**
     * 删除水号
     * @param userId
     * @return
     */
    void delTradeNo(String userId);

    /**
     * 验证库存
     * @param skuId
     * @param skuNum
     * @return
     */
    boolean checkStock(Long skuId, Integer skuNum);
    /**
     * 处理过期订单
     * @param orderId
     */
    void execExpiredOrder(Long orderId);

    /**
     * 根据订单Id 修改订单的状态
     * @param orderId
     * @param processStatus
     */
    void updateOrderStatus(Long orderId, ProcessStatus processStatus);

    /**
     * 获取订单信息
     * @param orderId
     * @return
     */
    public OrderInfo getOrderInfo(Long orderId);
}
